import { IsOptional, IsString, MinLength, MaxLength, ValidateNested, IsArray, IsNumber } from "class-validator";
import { Type } from "class-transformer";
import { UserProfileDto } from "./user-profile.dto";

/**
 * 用户更新参数DTO
 * 使用 Partial 工具类型，将 UserCreateDto 的所有字段变为可选
 * 同时对嵌套的 profile 对象也应用 Partial
 */
export class UpdateUserDto {
  @IsOptional()
  @IsString({ message: "用户名必须是字符串" })
  @MinLength(2, { message: "用户名长度不能少于2个字符" })
  @MaxLength(20, { message: "用户名长度不能超过20个字符" })
  username?: string;

  @IsOptional()
  @IsString({ message: "密码必须是字符串" })
  @MinLength(6, { message: "密码长度不能少于6个字符" })
  password?: string;

  @IsOptional()
  @ValidateNested({ message: "用户个人信息格式不正确" })
  @Type(() => UserProfileDto)
  profile?: Partial<UserProfileDto>;

  @IsOptional()
  @IsArray({ message: "分配角色必须是数组" })
  @IsNumber({}, { each: true, message: "角色ID必须是数字" })
  roles?: Array<number>;
}
